###########################
# 递归添加头文件路径
###########################
function(include_sub_directories_recursively root_dir)
    if (IS_DIRECTORY ${root_dir})               # 当前路径是一个目录吗，是的话就加入到包含目录
        #        if (${root_dir} MATCHES "include")
        include_directories(${root_dir})
        #        endif()
    endif()

    file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) # 获得当前目录下的所有文件，让如ALL_SUB列表中
    foreach(sub ${ALL_SUB})
        if (IS_DIRECTORY ${root_dir}/${sub})
            include_sub_directories_recursively(${root_dir}/${sub}) # 对子目录递归调用，包含
        endif()
    endforeach()
endfunction()

###########################
# 为列表元素添加前缀
###########################
macro(addprefix prefix list_name)
   SET(${list_name}_TMP)
   foreach(l ${${list_name}})
      list(APPEND ${list_name}_TMP ${prefix}${l} )
   endforeach()

   SET(${list_name} ${${list_name}_TMP})
   UNSET(${list_name}_TMP)
endmacro(addprefix)